home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / WarpQuake / Src / cvar.c < prev    next >
C/C++ Source or Header  |  2000-05-22  |  4KB  |  225 lines

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. // cvar.c -- dynamic variable tracking
  21.  
  22. #include "quakedef.h"
  23.  
  24. cvar_t    *cvar_vars;
  25. char    *cvar_null_string = "";
  26.  
  27. /*
  28. ============
  29. Cvar_FindVar
  30. ============
  31. */
  32. cvar_t *Cvar_FindVar (char *var_name)
  33. {
  34.     cvar_t    *var;
  35.     
  36.     for (var=cvar_vars ; var ; var=var->next)
  37.         if (!Q_strcmp (var_name, var->name))
  38.             return var;
  39.  
  40.     return NULL;
  41. }
  42.  
  43. /*
  44. ============
  45. Cvar_VariableValue
  46. ============
  47. */
  48. float    Cvar_VariableValue (char *var_name)
  49. {
  50.     cvar_t    *var;
  51.     
  52.     var = Cvar_FindVar (var_name);
  53.     if (!var)
  54.         return 0;
  55.     return Q_atof (var->string);
  56. }
  57.  
  58.  
  59. /*
  60. ============
  61. Cvar_VariableString
  62. ============
  63. */
  64. char *Cvar_VariableString (char *var_name)
  65. {
  66.     cvar_t *var;
  67.     
  68.     var = Cvar_FindVar (var_name);
  69.     if (!var)
  70.         return cvar_null_string;
  71.     return var->string;
  72. }
  73.  
  74.  
  75. /*
  76. ============
  77. Cvar_CompleteVariable
  78. ============
  79. */
  80. char *Cvar_CompleteVariable (char *partial)
  81. {
  82.     cvar_t        *cvar;
  83.     int            len;
  84.     
  85.     len = Q_strlen(partial);
  86.     
  87.     if (!len)
  88.         return NULL;
  89.         
  90. // check functions
  91.     for (cvar=cvar_vars ; cvar ; cvar=cvar->next)
  92.         if (!Q_strncmp (partial,cvar->name, len))
  93.             return cvar->name;
  94.  
  95.     return NULL;
  96. }
  97.  
  98.  
  99. /*
  100. ============
  101. Cvar_Set
  102. ============
  103. */
  104. void Cvar_Set (char *var_name, char *value)
  105. {
  106.     cvar_t    *var;
  107.     qboolean changed;
  108.     
  109.     var = Cvar_FindVar (var_name);
  110.     if (!var)
  111.     {    // there is an error in C code if this happens
  112.         Con_Printf ("Cvar_Set: variable %s not found\n", var_name);
  113.         return;
  114.     }
  115.  
  116.     changed = Q_strcmp(var->string, value);
  117.     
  118.     Z_Free (var->string);    // free the old value string
  119.     
  120.     var->string = Z_Malloc (Q_strlen(value)+1);
  121.     Q_strcpy (var->string, value);
  122.     var->value = Q_atof (var->string);
  123.     if (var->server && changed)
  124.     {
  125.         if (sv.active)
  126.             SV_BroadcastPrintf ("\"%s\" changed to \"%s\"\n", var->name, var->string);
  127.     }
  128. }
  129.  
  130. /*
  131. ============
  132. Cvar_SetValue
  133. ============
  134. */
  135. void Cvar_SetValue (char *var_name, float value)
  136. {
  137.     char    val[32];
  138.     
  139.     sprintf (val, "%f",value);
  140.     Cvar_Set (var_name, val);
  141. }
  142.  
  143.  
  144. /*
  145. ============
  146. Cvar_RegisterVariable
  147.  
  148. Adds a freestanding variable to the variable list.
  149. ============
  150. */
  151. void Cvar_RegisterVariable (cvar_t *variable)
  152. {
  153.     char    *oldstr;
  154.     
  155. // first check to see if it has allready been defined
  156.     if (Cvar_FindVar (variable->name))
  157.     {
  158.         Con_Printf ("Can't register variable %s, allready defined\n", variable->name);
  159.         return;
  160.     }
  161.     
  162. // check for overlap with a command
  163.     if (Cmd_Exists (variable->name))
  164.     {
  165.         Con_Printf ("Cvar_RegisterVariable: %s is a command\n", variable->name);
  166.         return;
  167.     }
  168.         
  169. // copy the value off, because future sets will Z_Free it
  170.     oldstr = variable->string;
  171.     variable->string = Z_Malloc (Q_strlen(variable->string)+1);    
  172.     Q_strcpy (variable->string, oldstr);
  173.     variable->value = Q_atof (variable->string);
  174.     
  175. // link the variable in
  176.     variable->next = cvar_vars;
  177.     cvar_vars = variable;
  178. }
  179.  
  180. /*
  181. ============
  182. Cvar_Command
  183.  
  184. Handles variable inspection and changing from the console
  185. ============
  186. */
  187. qboolean    Cvar_Command (void)
  188. {
  189.     cvar_t            *v;
  190.  
  191. // check variables
  192.     v = Cvar_FindVar (Cmd_Argv(0));
  193.     if (!v)
  194.         return false;
  195.         
  196. // perform a variable print or set
  197.     if (Cmd_Argc() == 1)
  198.     {
  199.         Con_Printf ("\"%s\" is \"%s\"\n", v->name, v->string);
  200.         return true;
  201.     }
  202.  
  203.     Cvar_Set (v->name, Cmd_Argv(1));
  204.     return true;
  205. }
  206.  
  207.  
  208. /*
  209. ============
  210. Cvar_WriteVariables
  211.  
  212. Writes lines containing "set variable value" for all variables
  213. with the archive flag set to true.
  214. ============
  215. */
  216. void Cvar_WriteVariables (FILE *f)
  217. {
  218.     cvar_t    *var;
  219.     
  220.     for (var = cvar_vars ; var ; var = var->next)
  221.         if (var->archive)
  222.             fprintf (f, "%s \"%s\"\n", var->name, var->string);
  223. }
  224.  
  225.